﻿package com.amcharts.chartClasses
{
	import com.amcharts.geom.*;
	import flash.display.*;
	import flash.filters.*;
	import flash.utils.*;
	import mx.core.*;
	import mx.styles.*;

	public class AmBalloon extends UIComponent
	{
		protected var _yPos:Number;
		protected var _container:Sprite;
		protected var _adjustBorderColor:Boolean;
		protected var _text:String;
		protected var _bullet:Sprite;
		protected var _interval:Number;
		protected var _previousX:Number;
		protected var _previousY:Number;
		protected var _bottom:Number;
		protected var _background:Rect;
		protected var _follow:Boolean;
		protected var _balloonColor:Number;
		protected var _show:Boolean;
		protected var _b:Number;
		protected var _pointToX:Number;
		protected var _l:Number;
		protected var _r:Number;
		protected var _t:Number;
		protected var _pointToY:Number;
		static const VERSION:String="1.8.3.1";
		private static var stylesInited:Boolean=initStyles();

		public function AmBalloon()
		{
			this.includeInLayout=false;
			var _loc_1:*=new DropShadowFilter();
			_loc_1.alpha=0.5;
			this.filters=[_loc_1];
			return;
		} // end function

		public function get bottomCoordinate():Number
		{
			return _bottom;
		} // end function

		public function changeColor(param1:Number):void
		{
			_balloonColor=param1;
			return;
		} // end function

		override protected function createChildren():void
		{
			super.createChildren();
			this.visible=false;
			this.mouseEnabled=false;
			this.mouseChildren=false;
			_bullet=new Sprite();
			addChild(_bullet);
			return;
		} // end function

		public function get yPos():Number
		{
			return _yPos;
		} // end function

		public function setPosition(param1:Number, param2:Number):void
		{
			_pointToX=param1;
			_pointToY=param2;
			invalidateDisplayList();
			return;
		} // end function

		public function setBounds(param1:Number, param2:Number, param3:Number,
			param4:Number):void
		{
			_l=param1;
			_t=param2;
			_r=param3;
			_b=param4;
			invalidateDisplayList();
			return;
		} // end function

		public function hide():void
		{
			_show=false;
			_follow=false;
			this.visible=false;
			return;
		} // end function

		public function set follow(param1:Boolean):void
		{
			if (param1)
			{
				_interval=setInterval(followMouse, 20);
			}
			else
			{
				clearInterval(_interval);
			}
			_follow=param1;
			_pointToX=parent.mouseX;
			_pointToY=parent.mouseY;
			invalidateDisplayList();
			return;
		} // end function

		protected function followMouse():void
		{
			if (_follow == true)
			{
			}
			if (visible == true)
			{
				_pointToX=parent.mouseX;
				_pointToY=parent.mouseY;
				if (_pointToX == _previousX)
				{
				}
				if (_pointToY != _previousY)
				{
					_previousX=_pointToX;
					_previousY=_pointToY;
					invalidateDisplayList();
				}
			}
			return;
		} // end function

		override protected function updateDisplayList(param1:Number, param2:Number):void
		{
			var _loc_3:Number=NaN;
			var _loc_4:Number=NaN;
			var _loc_5:Number=NaN;
			var _loc_6:Number=NaN;
			var _loc_7:Number=NaN;
			var _loc_8:String=null;
			var _loc_9:Number=NaN;
			var _loc_10:Number=NaN;
			var _loc_11:UITextFormat=null;
			var _loc_12:IUITextField=null;
			var _loc_13:Number=NaN;
			var _loc_14:Number=NaN;
			var _loc_15:Number=NaN;
			var _loc_16:Number=NaN;
			var _loc_17:Number=NaN;
			var _loc_18:Number=NaN;
			var _loc_19:Boolean=false;
			var _loc_20:Sprite=null;
			var _loc_21:DropShadowFilter=null;
			var _loc_22:Array=null;
			var _loc_23:Array=null;
			var _loc_24:Number=NaN;
			var _loc_25:Number=NaN;
			super.updateDisplayList(param1, param2);
			if (_show)
			{
			}
			if (this.enabled)
			{
				_loc_3=this.getStyle("borderColor");
				_loc_4=this.getStyle("fillColor");
				if (!isNaN(_balloonColor))
				{
					if (this.getStyle("adjustBorderColor"))
					{
						_loc_3=_balloonColor;
					}
					else
					{
						_loc_4=_balloonColor;
					}
				}
				this.visible=true;
				_loc_5=getStyle("horizontalPadding");
				_loc_6=getStyle("verticalPadding");
				_loc_7=getStyle("pointerWidth");
				_loc_8=getStyle("pointerOrientation");
				_loc_9=getStyle("cornerRadius");
				_loc_10=getStyle("textShadowColor");
				if (_container)
				{
					removeChild(_container);
				}
				_container=new Sprite();
				addChild(_container);
				_loc_11=determineTextFormatFromStyles();
				_loc_11.color=getStyle("color");
				_loc_12=IUITextField(createInFontContext(UITextField));
				_loc_13=getStyle("maximumWidth");
				_loc_12.width=_loc_13;
				_loc_12.defaultTextFormat=_loc_11;
				_loc_12.setTextFormat(_loc_11);
				_loc_12.multiline=true;
				_loc_12.wordWrap=true;
				_loc_12.htmlText=_text;
				_loc_12.selectable=false;
				_loc_12.x=_loc_5;
				_loc_12.y=_loc_6;
				_loc_12.antiAliasType=_loc_11.antiAliasType;
				_loc_12.gridFitType=_loc_11.gridFitType;
				_loc_12.sharpness=_loc_11.sharpness;
				_loc_12.thickness=_loc_11.thickness;
				if (systemManager)
				{
				}
				_loc_12.embedFonts=systemManager.isFontFaceEmbedded(_loc_11);
				if (isNaN(_loc_10) == false)
				{
					_loc_21=new DropShadowFilter(1, 45, _loc_10, 0.5, 0, 0);
					_loc_12.filters=[_loc_21];
				}
				_container.addChild(DisplayObject(_loc_12));
				_loc_14=_loc_12.textWidth + 7;
				if (_loc_13 > _loc_14)
				{
					_loc_12.width=_loc_14;
				}
				_loc_12.height=_loc_12.textHeight + 4;
				_loc_15=_loc_12.height + 2 * _loc_6;
				_loc_16=_loc_12.width + 2 * _loc_5;
				if (_loc_8 != "horizontal")
				{
					_loc_17=_pointToX - _loc_16 / 2;
					if (_pointToY <= _t + _loc_15 + 10)
					{
					}
					if (_loc_8 == "down")
					{
						_loc_19=true;
						if (_follow)
						{
							_pointToY=_pointToY - 5;
						}
						_loc_18=_pointToY - _loc_15 - _loc_7;
					}
					else
					{
						if (_follow)
						{
							_pointToY=_pointToY + 5;
						}
						_loc_18=_pointToY + _loc_7;
					}
				}
				else
				{
					if (_loc_7 * 2 > _loc_15)
					{
						_loc_7=_loc_15 / 2;
					}
					_loc_18=_pointToY - _loc_15 / 2;
					if (_pointToX < _l + (_r - _l) / 2)
					{
						_loc_17=_pointToX + _loc_7;
					}
					else
					{
						_loc_17=_pointToX - _loc_16 - _loc_7;
					}
				}
				if (_loc_18 + _loc_15 >= _b)
				{
					_loc_18=_b - _loc_15;
				}
				if (_loc_18 < _t)
				{
					_loc_18=_t;
				}
				if (_loc_17 < _l)
				{
					_loc_17=_l;
				}
				if (_loc_17 + _loc_16 > _r)
				{
					_loc_17=_r - _loc_16;
				}
				_container.x=_loc_17;
				_container.y=_loc_18;
				if (_loc_9 > 0)
				{
					_loc_20=
						new Rect(_loc_16, _loc_15, [_loc_4], [this.getStyle("fillAlpha")],
						this.getStyle("borderThickness"), _loc_3,
						this.getStyle("borderAlpha"), this.getStyle("cornerRadius"));
					if (this.getStyle("showBullet"))
					{
						_bullet.graphics.clear();
						_bullet.graphics.beginFill(_loc_4, getStyle("fillAlpha"));
						_bullet.graphics.drawCircle(_pointToX, _pointToY, 3);
					}
				}
				else
				{
					_loc_22=new Array();
					_loc_23=new Array();
					if (_loc_8 != "horizontal")
					{
						_loc_24=_pointToX - _loc_17;
						if (_loc_24 > _loc_16 - _loc_7)
						{
							_loc_24=_loc_16 - _loc_7;
						}
						if (_loc_24 < _loc_7)
						{
							_loc_24=_loc_7;
						}
						_loc_22=
							[0, _loc_24 - _loc_7, _pointToX - _loc_17, _loc_24 + _loc_7,
							_loc_16, _loc_16, 0, 0];
						if (_loc_19)
						{
							_loc_23=
								[_loc_15, _loc_15, _pointToY - _loc_18, _loc_15, _loc_15,
								0, 0, _loc_15];
						}
						else
						{
							_loc_23=[0, 0, _pointToY - _loc_18, 0, 0, _loc_15, _loc_15, 0];
						}
					}
					else
					{
						_loc_25=_pointToY - _loc_18;
						if (_loc_25 > _loc_15 - _loc_7)
						{
							_loc_25=_loc_15 - _loc_7;
						}
						if (_loc_25 < _loc_7)
						{
							_loc_25=_loc_7;
						}
						_loc_23=
							[0, _loc_25 - _loc_7, _pointToY - _loc_18, _loc_25 + _loc_7,
							_loc_15, _loc_15, 0, 0];
						if (_pointToX < _l + (_r - _l) / 2)
						{
							_loc_22=[0, 0, _pointToX - _loc_17, 0, 0, _loc_16, _loc_16, 0];
						}
						else
						{
							_loc_22=
								[_loc_16, _loc_16, _pointToX - _loc_17, _loc_16, _loc_16,
								0, 0, _loc_16];
						}
					}
					_loc_20=
						new Polygon(_loc_22, _loc_23, [_loc_4], [getStyle("fillAlpha")],
						getStyle("borderThickness"), _loc_3, getStyle("borderAlpha"));
				}
				_container.addChildAt(_loc_20, 0);
				_bottom=_container.y + _loc_15;
				_yPos=_loc_18;
			}
			return;
		} // end function

		public function destroy():void
		{
			clearInterval(_interval);
			return;
		} // end function

		public function show(param1:String):void
		{
			_text=param1;
			_show=true;
			invalidateDisplayList();
			return;
		} // end function

		private static function initStyles():Boolean
		{
			var styleDeclaration:*=StyleManager.getStyleDeclaration("AmBalloon");
			if (!styleDeclaration)
			{
				styleDeclaration=new CSSStyleDeclaration();
				StyleManager.setStyleDeclaration("AmBalloon", styleDeclaration, false);
			}
			styleDeclaration.defaultFactory=function():void
			{
				this.fillColor=13369344;
				this.fillAlpha=1;
				this.borderThickness=0;
				this.borderColor=0;
				this.borderAlpha=0;
				this.cornerRadius=0;
				this.maximumWidth=220;
				this.horizontalPadding=8;
				this.verticalPadding=5;
				this.pointerWidth=10;
				this.pointerOrientation="vertical";
				this.color=16777215;
				this.textShadowColor=0;
				this.adjustBorderColor=false;
				this.showBullet=true;
				return;
			} // end function
			;
			return true;
		} // end function

	}
}
